home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib20b.dsk
/
RPN CALCULATOR (II PLUS).bas
< prev
Wrap
BASIC Source File
|
2023-02-26
|
4KB
|
78 lines
1 REM **********************
2 REM * RPN *
3 REM * BY SKENE H. MOODY *
4 REM * COPYRIGHT (C) 1984 *
5 REM * BY MICROSPARC, INC *
6 REM * LINCOLN, MA. 01773 *
7 REM **********************
50 ONERR GOTO 3000
60 GOSUB 2000
100 GET A$
110 IF A$ = ";" THEN A$ = "+"
120 IF A<CTRL-A>$ = ":" THEN A$ = "*"
130 IF A$ = "N" THEN A$ = "^"
135 IF B$ = "-" AND ASC(A$) = 13 THEN X = -X: GOTO 700
140 IF A$ = "C" THEN B$ = "-" +B$: HTAB 1: PRINT B$;: GOTO 100
150 IF A$ = "F" THEN GOSUB 1500: GOTO 100
160 PRINT A$;:B$ = B$ +A$: IF ASC(B$) = 13 THEN T = Z:Z = Y:Y = X: PRINT X:B$ = "": GOTO 100
170 TE = ASC(A$): IF (TE >47 AND TE <58) OR (TE = 69) OR (A$ = ".") THEN 100
180 IF TE = 13 THEN T = Z:Z = Y:Y = X:X = VAL(B$):B$ = "": GOTO 100
190 IF TE = 8 AND LEN(B$) <3 THEN B$ = "": PRINT " "; CHR$(8);: GOTO 100
200 IF TE = 8 THEN B$ = LEFT$(B$, LEN(B$) -2): PRINT " "; CHR$(8);: GOTO 100
220 IF LEN(B$) >1 THEN IF TE = 45 AND MID$ (B$, LEN(B$) -1,1) = "E" THEN 100
300 IF LEN(B$) >1 THEN T = Z:Z = Y:Y = X:X = VAL(B$)
310 IF A$ = "+" THEN X = X +Y: GOTO 500
320 IF A$ = "-" THEN X = Y -X: GOTO 500
330 IF A$ = "*" THEN X = X *Y: GOTO 500
340 IF A$ = "/" THEN X = Y/X: GOTO 500
350 IF A$ = "^" THEN X = Y ^X: GOTO 500
360 IF A$ = "L" THEN X = LOG(X): GOTO 700
370 IF A$ = "Q" THEN X = SQR(X): GOTO 700
380 IF A$ = "X" THEN X = EXP(X): GOTO 700
400 IF A$ = "S" THEN TE = X:X = Y:Y = TE: GOSUB 610: GOTO 100
410 IF A$ = "R" THEN GOSUB 610: GOTO 100
420 IF A$ = "D" THEN TE = X:X = Y:Y = Z:Z = T:T = TE: GOSUB 610: GOTO 100
430 IF A$ = "U" THEN TE = T:T = Z:Z = Y:Y = X:X = TE: GOSUB 610: GOTO 100
490 GOTO 100
500 Y = Z:Z = T:B$ = "": IF NOT (F) OR ABS(X) = >1E9 THEN PRINT : PRINT X: GOTO 100
600 XX = X: GOSUB 1000: GOTO 100
610 PRINT : PRINT "T = ";T: PRINT "Z = ";Z: PRINT "Y = ";Y: PRINT "X = ";X:B$ = "": RETURN
700 B$ = "": IF NOT (F) OR ABS(X) > = 1E9 THEN PRINT : PRINT X: GOTO 100
710 XX = X: GOSUB 1000: GOTO 100
1000 PRINT :S = SGN(XX):IL = W% -D% -1: IF D% = 0 THEN IL = IL +1
1020 N2 = 10 ^D%:N1 = ABS(XX) +.5/N2:IP = INT(N1):FP = INT(N2 *(N1 -IP)) +N2:X$ = STR$(IP):L = LEN(X$):C = (L -1)/3:B% = 3
1080 IF C <1 THEN 1100
1090 X$ = LEFT$(X$, LEN(X$) -B%) +"," + RIGHT$(X$,B%):B% = B% +4:C = C -1:IL = IL -1: GOTO 1080
1100 IF IL = 0 AND IP = 0 THEN X$ = "":L = 0
1110 IF S <0 THEN L = L +1:X$ = "-" +X$: IF IP = 0 AND IL = 1 THEN X$ = "-":L = 1
1120 IF IL <L THEN 1160
1130 IF IL >L THEN X$ = " " +X$:L = L +1: GOTO 1130
1140 IF D% >0 THEN X$ = X$ +"." + RIGHT$( STR$(FP),D%)
1150 PRINT X$: RETURN
1160 X$ = "*************************":X$ = LEFT$(X$,W%): PRINT X$: RETURN
1500 INPUT "HOW MANY DECIMALS ? ";D%: IF D% >9 THEN F = 0: RETURN
1510 F = 1:W% = 19: RETURN
2000 TEXT : HOME : PRINT " KEY FUNCTION"
2010 PRINT "------ ---------"
2020 PRINT "RETURN ENTER (^)"
2030 PRINT " C CHANGE SGN"
2040 PRINT "+ OR ; ADD"
2050 PRINT " - SUBTRACT"
2060 PRINT "* OR : MULTIPLY"
2070 PRINT " / DIVIDE"
2080 PRINT "^ OR N Y ^ X"
2090 PRINT " L LN (X)"
2100 PRINT " X EXP (X)"
2110 PRINT " Q SQRT (X)"
2120 PRINT "------------------"
2130 PRINT " <-- RUBOUT"
2140 PRINT "(R)EV. REVIEW STK"
2150 PRINT "(S)WAP X <--> Y"
2160 PRINT "(D)OWN ROLL DOWN"
2170 PRINT "(U)P ROLL UP"
2180 PRINT " F SET FORMAT": PRINT "------------------": PRINT : PRINT "COPYRIGHT 1984 BY": PRINT "MICROSPARC, INC."
2190 FOR I = 1 TO 24: VTAB I: HTAB 19: PRINT "!";: NEXT : POKE 32,20: POKE 33,20:D% = 2: GOSUB 1510: HOME : RETURN
3000 I = PEEK(222): PRINT CHR$(7): PRINT "ERR:";: IF I = 0 OR I >15 THEN J = 53856 +I +(I = 255) * -1: GOTO 3020
3010 J = 43377 + PEEK(43583 +I)
3020 K = PEEK(J): PRINT CHR$(K);: IF K <192 THEN J = J +1: GOTO 3020
3030 PRINT :A$ = "R": GOTO 410